package com.shaozj.online.model.entity;


import com.baomidou.mybatisplus.annotation.TableName;
import com.shaozj.core.base.BaseEntity;
import com.shaozj.core.converter.JsonbConverter;
import jakarta.persistence.Convert;
import jakarta.persistence.Transient;
import lombok.Data;

import java.util.Map;

/**
 *  模型数据（GenericData）
 *  通用的数据表实体，用于存储任意模型的实例数据。
 *  - 高频字段：可以雾化为真正的列
 *  - 扩展字段（extra）：以 JSONB 格式存储任意动态 字段（键值对）
 *  说明：
 *      - modelId：表示该条数据属于哪个模型（meta_model.id）
 *      - tenantId： 多租户 / 租户表示，用于数据隔离
 *      - createdBy： 创建人
 *      - hotFields：热字段（高频字段）的一个男生和（Transient，引用于内存/业务操作）
 *      - extra： 扩展字段（JSON），持久化到数据库 JSONB 列
 */
@Data
@TableName(value ="t_meta_field")
public class GenericData extends BaseEntity {

    private Long id;

    private Long modelId;

    private Long createdBy;

    /**
     * 高频字段在不同模型间可能不一样
     * 这里用一个 Map 暂存热字段（业务层使用），注意：@Transient 表示该字段不会持久化到数据库
     * 如果这个字段需要作为数据库列（物化），应该在建表 /DDL 时添加真实列并在实体中映射为普通字段。
     */
    @Transient
    private Map<String, Object> hotFields;

    @Convert(converter = JsonbConverter.class)
    private Map<String, Object> extra;

}
